package com.daxue.localserver.grpc;

import com.daxue.grpc.lib.HelloReply;
import com.daxue.grpc.lib.HelloRequest;
import com.daxue.grpc.lib.SimpleGrpc;
import io.grpc.stub.StreamObserver;
import net.devh.boot.grpc.server.service.GrpcService;

import java.util.Date;

/**
 * @author daxue0929
 * @date 2022/08/31
 * GrpcServerService.java中有几处需要注意：
 * 是使用@GrpcService注解，再继承SimpleImplBase，
 * 这样就可以借助grpc-server-spring-boot-starter库将sayHello暴露为gRPC服务；
 *
 * SimpleImplBase是前文中根据proto自动生成的java代码，在spring-boot-grpc-lib模块中；
 *
 * sayHello方法中处理完毕业务逻辑后，调用HelloReply.onNext方法填入返回内容；
 * 调用HelloReply.onCompleted方法表示本次gRPC服务完成；
 *
 * 至此，gRPC服务端编码就完成了，咱们接着开始客户端开发
 *
 **/
@GrpcService
public class GrpcServerService extends SimpleGrpc.SimpleImplBase  {
    @Override
    public void sayHello(HelloRequest request, StreamObserver<HelloReply> responseObserver) {
        HelloReply reply = HelloReply.newBuilder()
                .setMessage(
                    "你好， " +
                        request.getName() + ", " +
                        "我是服务端的实现，当前服务端的时间是："
                        + new Date()
                )
            .build();
        responseObserver.onNext(reply);
        responseObserver.onCompleted();
    }
}
